package com.fsk.starter.service;

import com.fsk.starter.common.Prefix;

/**
 * 自定义 redis 接口
 *
 */
public interface RedisService {

    /**
     * 存
     *
     * @param prefix 封装前缀和存活时间
     * @param key    key
     * @param data   value
     * @param <T>    任意类型
     */
    <T> void set(Prefix prefix, String key, T data);

    /**
     * 取
     *
     * @param prefix 封装前缀和存活时间
     * @param key    key
     * @param clz    字节码文件
     * @param <T>    任意类型
     * @return 指定格式的 value
     */
    <T> T get(Prefix prefix, String key, Class<T> clz);

    /**
     * 判断 key 是否已经存在
     *
     * @param prefix 前缀
     * @param key    key
     * @return 存在返回 true,不存在返回 false
     */
    boolean exists(Prefix prefix, String key);

    /**
     * 基于 Redis 实现连续签到
     *
     * @param prefix 前缀
     * @param key    key
     * @return 返回连续签到的天数
     */
    int signIn(Prefix prefix, String key);

    /**
     * 删除key
     * @param prefix
     * @param key
     */
    void delete(Prefix prefix, String key);

}

